package com.hp.test.interview.multiarray;

/**
 * http://www.careercup.com/question?id=6685828805820416
 * UnicodeMaxIntValue Edge cases
 * Values in cell should be in range of 2D array.
 */
class Cell {
    int x;
    int y;

    Cell(int x, int y) {
        this.x = x;
        this.y = y;
    }
}

public class MoveCellPerCellValue {

    public static void main(String args[]) {
        Cell cell[][] = new Cell[3][2];
        cell[0][0] = new Cell(0, 1);
        cell[0][1] = new Cell(2, 0);
        cell[1][0] = null;
        cell[1][1] = new Cell(1, 0);
        cell[2][0] = new Cell(2, 1);
        cell[2][1] = new Cell(1, 1);

        MoveCellPerCellValue mcp = new MoveCellPerCellValue();
        System.out.println(mcp.isAllCellTraversed(cell));
    }

    public boolean isAllCellTraversed(Cell grid[][]) {
        boolean[][] visited = new boolean[grid.length][grid[0].length];

        int total = grid.length * grid[0].length;
        int startx = grid[0][0].x;
        int starty = grid[0][0].y;
        for (int i = 0; i < total - 2; i++) {
            if (grid[startx][starty] == null) {
                return false;
            }
            if (visited[startx][starty] == true) {
                return false;
            }
            visited[startx][starty] = true;
            int x = grid[startx][starty].x;
            int y = grid[startx][starty].y;
            startx = x;
            starty = y;
        }
        if (grid[startx][starty] == null) {
            return true;
        }
        return false;
    }
}
